package Controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileNotFoundException;
import java.io.IOException;

import Model.Contact;
import Model.FichierManager;
import View.addContactView;
import View.addressBookView;
import View.modifieContactView;

/**
 * 
 * @author mada
 *classe addressBookController
 *s'occuper de gerer la vue addressBookView avec ses donnés
 */
public class addressBookController {
	private addressBookView view;
	private modifieContactView view2;
	private FichierManager man= new FichierManager("fichier.txt");
	private Thread t;
	private Thread t2;
	
	public addressBookController(addressBookView view) {
		//System.out.println("classe: AddressBookController, methode: constructeur");
		this.view = view;

		this.view.ouvrirFenetreListener(new classAjouterContact());
		this.view.supprimerContactListener(new classSuppContact());
		this.view.afficherInfoContactListener(new classInfoContact());
		this.view.shearchContactListener(new classShearchContact());
		this.view.modifierContactListener(new classModofierContact());
		this.view.afficherGroupeContactListener(new classGrpContact());
	}

	/**
	 * 
	 * @author mada
	 * classe interne executé lorsqu'on clique 
	 * sur le boutton ajouter dans la vue
	 */
	class classAjouterContact implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			addContactView nouvFenetre= new addContactView();
			addContactController con=new addContactController(nouvFenetre);
		}
	}

	// bouton supprimer contacte
	class classSuppContact implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			t= new Thread(new ThreadAction());
			t.start();
			
		}

	}

	// bouton rechercher contact
	class classShearchContact implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			String nomPrenomRecherche=null;
			nomPrenomRecherche=view.getJtf1();
			view.afficherInfoContactRecherche(nomPrenomRecherche);
		}

	}

	// bouton modifier
	class classModofierContact implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			t2=new Thread(new ThreadAction2());
			t2.start();
	
		}
	}
	
	//appuie sur la jlist groupe affichier contact dans la jlist contact
	class classGrpContact implements MouseListener{

		@Override
		public void mouseClicked(MouseEvent e) {
			//view.viderDernPanel();
			String grp=view.getJlistGrp().getSelectedValue().toString();
			System.out.println(grp);
			if(grp.equals("Amis")) view.remplirJlistAmis();
			else if(grp.equals("Famille")) view.remplirJlistFamille();
			else if(grp.equals("Travail")) view.remplirJlistTravail();
			
			else view.remplirJlist(); 
			
		
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}
		
	}
	
	// appuie sur la jlist
	class classInfoContact implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent e) {
			//System.out.println("classe: classInfoContact dans AddressBookController, methode: actionPerforme, role: j'appuie sur ma Jlist");
			view.afficherInfoContact();
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub

		}
	}
	/**
	 * 
	 * @author mada
	 * class interne implémenté de Runnable:
	 * la fonction run est executé dans la methode actionPormed
	 * dans la class interne classSuppContact lorsque le
	 * thread est instancié avec la methode .start()
	 * 
	 */
	class ThreadAction implements Runnable{

		public void run() {
			Contact cont_test = new Contact("", "", "", "", "", "", "","");
			cont_test = man.rechercherContact(view.getJlist().getSelectedValue().toString());
			String grp=cont_test.getGroupe();
			
			try {
				man.supprimerContact(cont_test);
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			
			view.remplirArrayList();
			if(grp.equals("Amis")) view.remplirJlistAmis();
			else if(grp.equals("Famille")) view.remplirJlistFamille();
			else view.remplirJlistTravail();
			view.remplirJlist();
			
		}
		
	}
	/**
	 * 
	 * @author mada
	 * class interne implémenté de Runnable:
	 * la fonction run est executé dans la methode actionPormed
	 * dans la class interne classModifierContact lorsque le
	 * thread est instancié avec la methode .start()
	 * 
	 */
	class ThreadAction2 implements Runnable{

		@Override
		public void run() {
			Contact cont_test = new Contact("","","","","","","","");
			if(view.getJlist().getSelectedValue()==null){
				javax.swing.JOptionPane.showMessageDialog(null, "Selectionner un contact pour pouvoir le modifier.");
				return;
			}

			cont_test = man.rechercherContact(view.getJlist().getSelectedValue().toString());
			modifieContactView view2= new modifieContactView(cont_test);
			modifieContactController con2=new modifieContactController(view2);
			
		}
		
	}
	
}
